package com.itheima.d3_collections;

//目标：掌握方法中可变参数的使用
public class Demo1 {
    public static void main(String[] args) {
        /**
         * 需求：
         * 传递给方法一个整数，则和就是这个整数
         * 传递给方法两个整数，则求这两个整数的和
         * 传递给方法三个整数，则求这三个整数的和
         * 传递给方法一个数组，则求数组中元素的和
         */
        sum(1);
        sum(1, 2);
        sum(1, 2, 3);
        sum(1, 2, 3, 4);
        sum(1, 2, 3, 4, 5);
        int[] arr = {1, 2, 3, 4};
        sum(arr);
    }

    /**
     * 1.使用传统方式，针对几个需求定义几个方法
     * 这种解决方案：太麻烦，而且以后可能有求4个整数、5个整数、6个整数...
     */

    /*
    public static void sum(int a) {
        System.out.println("整数和：" + a);
    }

    public static void sum(int a, int b) {
        System.out.println("整数和：" + (a + b));
    }

    public static void sum(int a, int b, int c) {
        System.out.println("整数和：" + (a + b + c));
    }

    public static void sum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("整数和：" + sum);
    }
    */

    /**
     * 2.使用可变参数解决。只需要一个方法，然后方法的形参声明为可变参数
     * 格式：数据类型...参数名
     * 好处：提高了形参接收数据的灵活性
     */
    public static void sum(int... arr) {
        //尝试打印arr，得到结果是数组地址值，所以arr实际上是一个数组变量
        //System.out.println(arr);

        //求和就是针对数组求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("整数和：" + sum);
    }

    /**
     * 3.注意：可变参数只能是方法的最后一个形参，所以一个方法只能有一个可变参数
     */

    /*
    public static void method(int... a, int... b) {

    }
    */
}
